<?php
//класс для работы с корзиной, которая хранится в сессии

class Basket extends A_Content 
{
    protected $_session;
	public function __construct($top,$parent)
	{		
		parent::__construct($top,$parent);

        $this->_session = new Zend_Session_Namespace('basket');
        
        if( !isset($this->_session->count) ){//пока ничего нет            
            $this->_session->count = 0;
            $this->_session->goods = array();        
        }
    }

    //получить кол-во позиций в корзине
    public function count(){        
        return $this->_session->count;
    }
    
    //получить общее кол-во товаров в корзине
    public function countTotal(){
        $res = 0;
//        Zend_Debug::dump($this->session->goods);
        foreach ($this->_session->goods as $g)
            $res += $g['count'];    
            
        return $res;
    }
    
    
    protected function getSumma(){
        $res = 0;
        foreach ($this->_session->goods as $g)
            $res += $g['count']*$g['price'];
            
        return $res;
    }

    public function __get($param){
        if( $param == 'summa' ){ //общая сумма всех товаров
            return $this->getSumma();            
        }
    }

    /**
     * изменить кол-во какого-то товара в корзине
     *
     * @param unknown_type $aIndex
     * @param unknown_type $aCount
     */
    public function changeCount($item_id, $aCount){
        foreach ($this->_session->goods as $index => $g ){
            if( $g['id'] == $item_id ){                
                $this->_session->goods[$index]['count'] = $aCount;

                break;
            }
        }
    }
    
    //получаем товар по индексу в корзине
    public function item($index){
        $cnt = $this->count();
        $i=0;
        foreach ($this->_session->goods as $id){
            if( $i == $index ){
                break;
            }
            $i++;
        }
        return $this->_session->goods[$index];
    }
    
    public function itemById($item_id){
        foreach ($this->_session->goods as $g){
            if( $g['id'] == $index ){
                return $g;
            }
        }
        return null;
    }

    public function Clear(){//очистить корзину        
        $this->_session->count = 0;
        $this->_session->goods = array();      
    }

    public function __set($param, $value){

    }    

    public function deleteItem($item_id){//удалить товар из корзины
        if( !$this->isExist($item_id) )
            return; //нет такого товара        
        
        //определим индекс элемента
        $i = 0;
        foreach ($this->_session->goods as $g){
            if( $g['id'] == $item_id )
                break;
            $i++;
        }
        
//        Zend_Debug::dump($this->_session->goods);
//        echo "deleting i=$i";
        array_splice($this->_session->goods, $i, 1);
//        Zend_Debug::dump($this->_session->goods);
        $this->_session->count--;
    }

    public function deleter(){
    
    }

    //проверим, есть ли уже такой товар в корзине
    public function isExist($item_id){  
        if( $this->count() == 0 )
            return false;
            
        foreach ($this->_session->goods as $g) {
            if( $g['id'] == $item_id )
                return true;
        }
        return false;
    }
    
    /**
     * добавляем в корзину еще один товар
     *
     * @param unknown_type $item_id - объект
     * @param unknown_type $count
     */
    public function addGood($item_id, $count){
        if( $this->isExist($item_id) )//такой товар уже есть
            return;

        $value = $this->_top->Utils->prepareValueForSQL($count);

        //запоминаем там цену и сумму
        $price = $this->_top->_sql->exe("select * from ".TAB_PREF."catalog_item where item_id=$item_id");
        $item = $price[0];

        $newGood = array();
        $newGood['id'] = $item_id;
        $newGood['name'] = $item['name'];
        $newGood['count'] = $count;
        $newGood['price'] = $item['price'];
        $newGood['summa'] = $count*$item['price'];

        $this->_session->goods[] = $newGood;

        $this->_session->count++;

        $this->recalc();//пересчитали
    }
    
    public function recalc(){
    
    }    
    
	public function getById($id){
	}
	
	/**
	 * 
	 *
	 * @return A_SingleContent
	 */
	public function add(){
	
	}
	
	
	public function updateCountsFromCoockie(){
	   //Zend_Debug::dump($_COOKIE);
	   foreach ($_COOKIE as $index => $g){
	       if( strpos($index, 'good_') === 0 ){
	           $id = substr($index, 5, strlen($index) - 5);
                $this->changeCount($id, $g);
	       }	   
	   }
	}
}